Vergrijzing: de ineenstorting van de economie#

Elias Dekker (14638487), Thien An Pham (14263823) & Vincent Schoonderwoerd (13753002) | G3#

Introductie#

Door de stijgende welvaart zijn de medische zorg en hygiene in ontwikkelde landen de afgelopen jaren sterk verbeterd. Dat heeft ervoor gezorgd dat mensen steeds ouder worden. Op zich is dat een goede ontwikkeling, maar daardoor ontstaat er een nieuw probleem: vergrijzing. Vergrijzing houdt in dat de gemiddelde leeftijd stijgt, en dat de verhouding tussen ouderen/niet-werkenden verandert; het aantal ouderen/niet-werkenden neemt toe en het aantal werkenden neemt juist af.

Dat vormt een probleem voor de maatschappij, want vergrijzing heeft invloed op de arbeidsmarkt, belastinginkomsten, zorgkosten en dus ook op de economie.

We bekijken de vergrijzing in Nederland vanuit twee perspectieven:

  • Perspectief 1: vergrijzing is een nationaal probleem.

Veranderingen in de samenleving zijn vereist om de problemen op het gebied van de economie, die de vergrijzing met zich meebrengt op te lossen. Gebeurt dat niet, dan kan dat ingrijpende gevolgen hebben voor de economie.

Bij toenemende vergrijzing stijgt het aantal niet-werkenden en daalt het aantal werkenden. Dat betekent dat er meer mensen zijn die voor kosten zorgen qua sociale voorzieningen, in onder andere de zorg en pensioenen, en minder mensen die voor inkomsten zorgen om de sociale voorzieningen te kunnen financieren.

  • Perspectief 2: vergrijzing is een regionaal probleem.

Jonge mensen trekken vanuit het platteland naar de grote steden om daar te studeren en te werken, en ouderen blijven achter. Doordat jonge mensen vertrekken, zullen veel voorzieningen onder druk komen te staan. Denk bijvoorbeeld aan winkels die een lagere omzet draaien en er kan niet voldaan worden aan de zorgbehoefte van de overgebleven ouderen in deze krimpregio’s. De arbeidsmarkt en consumentenmarkt zullen krimpen in die regio’s, waardoor de economische groei eerst stagneert en vervolgens daalt.

Met data uit de hierondergenoemde datasets hebben we voor beide perspectieven visualisaties gemaakt. De visualisaties bestaan uit verschillende typen grafieken, en aan de hand van de visualisaties hebben we beide perspectieven beargumenteerd.

Dataset en preprocessing#

Hide code cell source
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import matplotlib.pyplot as plt
import json
import ipywidgets as widgets
from ipywidgets import interact, IntSlider
from IPython.display import display
from plotly.subplots import make_subplots

bevolking = pd.read_csv("Bevolking_op_1_januari_en_gemiddeld__geslacht__leeftijd_en_regio_22062023_182818.csv", sep=';')
levensverwachting = pd.read_csv("Levensverwachting.csv", sep=';',decimal=',')
grijzedruk = pd.read_csv('Landelijke_grijzedruk.csv', sep=';')
wlz = pd.read_csv('Aantal_wlz.csv', sep=';')
uitkeringen = pd.read_csv('Uitkeringen_draft.csv', sep=";")
Provinciale_regionalegroei = pd.read_csv('Regionale_economischegroei_2019.csv', sep=';')
Regionale_grijzedruk = pd.read_csv('Regionale_grijzedruk_2019.csv', sep=';')
Provinciale_economischegroei = pd.read_csv('Provinciale_regionalegroei_draft.csv', sep=";")
bevolking = bevolking[bevolking["Leeftijd"].str.contains("jaar of ouder") == False]
result = pd.concat([bevolking, levensverwachting, grijzedruk, wlz, uitkeringen, Provinciale_regionalegroei, Regionale_grijzedruk, Provinciale_economischegroei], ignore_index=True, sort=False)

result['Perioden'] = result['Perioden'].apply(str)
result['Perioden'] = result['Perioden'].str.replace('JJ00', '')
result['Perioden'] = result['Perioden'].astype(str)
result['RegioS'] = result['RegioS'].str.strip()

result.to_csv('result.csv')

We hebben negen dataset-bestanden van het CBS gebruikt. Deze datasets kunnen op de website al op onderwerp (variabelen), regio en perioden geselecteerd worden. De variabelen die we gebruiken zijn:

  • Jaartallen (Discrete, Ordinaal)

  • Aantal mannen (Discrete, Ratio)

  • Aantal vrouwen (Discrete, Ratio)

  • Levensverwachting (Discrete, Ratio)

  • Totaal uitkeringen (Discrete, Ratio)

  • Zorgwetten (Discrete, Ratio)

  • Pensioen (Discrete, Ratio)

  • Grijze druk (Discrete, Ratio)

  • Volumeverandering bbp (Discrete, Ratio)

  • Regio (Corop & Provincie) (Discrete, Nominaal)

De datasets worden opgeschoond door de volgende operaties: puntkomma’s vervangen door komma’s, alle spaties verwijderen en de variabele van jaar opschonen (“2010JJ00” veranderen naar “2010”). De verschillende datasets worden dan samengevoegd om één dataframe te vormen.

Perspectief 1:#

Veranderende samenstelling van de Nederlandse bevolking#

Dit perspectiefverhaal begint in 1950, tijdens de wederopbouw van net na de Tweede Wereldoorlog. In die tijd werd een groot aantal mensen geboren, de zogenaamde babyboomers. Door de vreugde van de bevrijding en het feit dat men weer perspectief had, stichtten veel mensen een ​​gezin.

Naarmate de tijd verstreek daalde het geboortecijfer door de stijgende welvaart en de introductie van anticonceptiemiddelen. Hierdoor hadden mensen de mogelijkheid om bewust te kiezen wanneer ze kinderen wilden krijgen. Daarnaast daalde het aantal ongeplande zwangerschappen.

Maar door het huidige dalende geboortecijfer, stijgt de grijze druk. De grijze druk is de verhouding tussen het aantal 65-plussers en het aantal mensen van 20-64 jaar. De groep werkenden zal dus een grote groep ouderen moeten onderhouden. Het is dus noodzakelijk dat de overheid maatregelen neemt, zoals het creëren van duurzame systemen voor gezondheidszorg, sociale zekerheid en pensioenen, maar ook het stimuleren van participatie vanuit de oudere generatie.

Hide code cell source
bevolking = result[result['Leeftijd'].str.contains("jaar", na = False)]

bevolking_mannen = bevolking[['Perioden', 'Leeftijd', 'Mannen']]
bevolking_vrouwen = bevolking[['Perioden', 'Leeftijd', 'Vrouwen']]

bevolking_mannen = bevolking_mannen[bevolking_mannen['Mannen'] != '.']
bevolking_vrouwen = bevolking_vrouwen[bevolking_vrouwen['Vrouwen'] != '.']

bevolking_mannen['Mannen'] = pd.to_numeric(bevolking_mannen['Mannen'])
bevolking_vrouwen['Vrouwen'] = pd.to_numeric(bevolking_vrouwen['Vrouwen'])

bevolking_mannen['Mannen'] = - bevolking_mannen['Mannen']

fig = go.Figure()

num_steps = 36

for step in bevolking['Perioden'].unique():
    fig.add_trace(go.Bar(visible=False, y=bevolking_mannen[bevolking_mannen['Perioden'] == step]['Leeftijd'], x=bevolking_mannen[bevolking_mannen['Perioden'] == step]['Mannen'], orientation='h', name='Mannen'))

for step in bevolking['Perioden'].unique():
    fig.add_trace(go.Bar(visible=False, y=bevolking_vrouwen[bevolking_vrouwen['Perioden'] == step]['Leeftijd'], x=bevolking_vrouwen[bevolking_vrouwen['Perioden'] == step]['Vrouwen'], orientation='h', name='Vrouwen'))

fig.data[0].visible = True
fig.data[36].visible = True

steps = []

for i in range(num_steps):
    step = dict(
        method="update",
        args=[{"visible": [False] * len(fig.data)},
              {"title": "Bevolkingspiramide: " + str(i + 1988)}],
    label=str(i + 1988))
    step["args"][0]["visible"][i] = True
    step["args"][0]["visible"][i + num_steps] = True
    steps.append(step)

sliders = [dict(
    active=0,
    currentvalue={"prefix": "Jaar: "},
    steps=steps
)]

fig.update_layout(title = 'Bevolkingspiramide: 1988',
        sliders=sliders,
                 xaxis = dict(tickvals = [-100000, -50000,
                                          0, 50000, 100000],
                              ticktext = ['100.000', '50.000',
                                          '0', '50.000', '100.000'])
                 )

fig.show()

Figuur 1: Deze bevolkingspiramide visualiseert de verdeling van de bevolking op basis van leeftijd en geslacht in Nederland, de demografische structuur. De x-as toont het aantal mensen. De y-as bevat de leeftijdsgroepen. Er is een slider aanwezig waarmee het jaartal van de bevolkingspiramide kan worden aangepast. De breedte van elke staaf vertegenwoordigt de grootte van iedere leeftijdsgroep. Deze grafiek biedt belangrijke inzichten in de leeftijdsopbouw van de bevolking, zoals vergrijzing.

De jaren na de oorlog waren er veel veranderingen: economische groei, verbeterde gezondheidszorg en betere levensomstandigheden. Al deze veranderingen leiden tot een hogere levensverwachting.

Het voortdurend toenemen van de levensverwachting leidt tot een steeds grotere groep ouderen. Dit heeft grote implicaties, van de gezondheidszorg tot het arbeidsmarktbeleid. De groep ouderen die onderhouden moeten worden, wordt dus steeds groter.

Hide code cell source
levensverwachting = result.loc[result['Jaar'].notnull(), ['Totaal mannen en vrouwen','Mannen', 'Vrouwen', 'Jaar']]

Totaal = go.Scatter(
    x=levensverwachting['Jaar'],
    y=levensverwachting['Totaal mannen en vrouwen'],
    mode='lines',
    name='Totaal mannen en vrouwen'
)

Mannen = go.Scatter(
    x=levensverwachting['Jaar'],
    y=levensverwachting['Mannen'],
    mode='lines',
    name='Mannen'
)

Vrouwen = go.Scatter(
    x=levensverwachting['Jaar'],
    y=levensverwachting['Vrouwen'],
    mode='lines',
    name='Vrouwen'
)

layout = go.Layout(
    title='Levensverwachting in Nederland',
    xaxis=dict(title='Jaar'),
    yaxis=dict(title='Levensverwachting (jaren)'),
    hovermode='x unified'
)

fig = go.Figure(data=[Totaal, Mannen, Vrouwen], layout=layout)

fig.show()

Figuur 2: De x-as toont de jaartallen 1950 t/m 2022. De y-as is de levensverwachting. In de grafiek is te zien dat de levensverwachting sinds 1950 bijna elk jaar stijgt.

Nederland vergrijst#

Door de toenemende vergrijzing zal ook het aantal ouderen met chronische aandoeningen, zowel fysiek als mentaal, toenemen. Met name dementie zal zorgen voor veel sterfte en een hoge ziektelast. Ook zal het aantal ouderen met multimorbiditeit (meerdere aandoeningen tegelijk) toenemen en daardoor ook de vraag naar complexere zorg. Daarnaast hebben ouderen een grotere kans op vallen, gezichtsstoornissen en incontinentie wat ook kan leiden tot behoefte aan zorg.

De Wet langdurige zorg (Wlz), voorheen Algemene Wet Bijzondere Ziektekosten (AWBZ), regelt intensieve zorg voor onder andere kwetsbare ouderen. De eerdergenoemde zaken maken ouderen kwetsbaar, wat zal resulteren in een toename van ouderen in de Wlz. Iedereen in Nederland betaalt via premies en belastingen mee aan de Wlz. Het grootste deel van de 65-plussers werkt niet. Door de vergrijzing, worden er steeds meer zorgkosten gemaakt, en zijn er in verhouding steeds minder mensen die voor de financiering hiervoor zorgen. Dat zal leiden tot hogere premies en belastingen.

grijzedruk = result.loc[result['GrijzeDruk_22'].notnull(), ['Perioden','GrijzeDruk_22']]
wlz = result.loc[result['PersonenVan80JaarOfOuder_51'].notnull(), ['Perioden','PersonenVan80JaarOfOuder_51']]
grijzedruk['Perioden'] = grijzedruk['Perioden'].astype('int')

grijzedruk = grijzedruk.loc[grijzedruk['Perioden'] > 2000]

fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
    go.Scatter(x=grijzedruk['Perioden'], y=grijzedruk['GrijzeDruk_22'], name="Grijze druk"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=wlz['Perioden'], y=wlz['PersonenVan80JaarOfOuder_51'], name="Aantal 80-plussers in de Wlz-gefinancierde zorg"),
    secondary_y=True,
)

fig.update_layout(
    title_text="Grijze druk & aantal 80-plussers in de Wlz",
    hovermode='x unified'
)

fig.update_xaxes(title_text="Jaar")
fig.update_yaxes(title_text="Grijze druk (%)", secondary_y=False)
fig.update_yaxes(title_text="Aantal", secondary_y=True)

fig.show()

Figuur 3: De x-as toont de jaartallen. Er zijn twee y-assen. De rechter y-as hoort bij de grijze druk en is in procenten. De linker y-as hoort bij het aantal 80-plussers in de Wet landurige zorg (Wlz) en is in absolute aantallen. In de grafiek is te zien dat de grijze druk en het aantal 80-plussers dat in de Wlz zit over de jaren heen geleidelijk stijgen.

In reactie op de vergrijzing wijst de overheid steeds meer geld toe aan ouderenzorg. De grafiek die de geldstroom naar ouderenzorg weergeeft, laat zien dat de investeringen gestaag zijn toegenomen naarmate de vergrijzing vorderde. Met een groter aantal ouderen dat zorg en ondersteuning nodig heeft, is er een groeiende behoefte aan faciliteiten, personeel en programma’s die aan hun behoeften voldoen.

Deze toename van de geldstroom naar ouderenzorg is een erkenning van de uitdagingen en verantwoordelijkheden die gepaard gaan met een vergrijzende bevolking. Het benadrukt de inzet van de overheid om de kwaliteit van leven van ouderen te waarborgen en hen de zorg te bieden die ze verdienen.

Hide code cell source
totaal =  ['T001397']
totaal = result[result['Uitkeringen'].isin(totaal)]

aow = ['A045116']
aow = result[result['Uitkeringen'].isin(aow)]

ouderen =  ['A045119', 'A045137', 'A045121']
ouderen = result[result['Uitkeringen'].isin(ouderen)]

zorgwetten=ouderen.groupby('Perioden')['SocialeUitkeringen_1'].sum()
zorgwetten=zorgwetten.reset_index()

selected_data = totaal.loc[totaal['Uitkeringen'] == 'T001397']
fig = go.Figure()
fig.add_trace(go.Scatter(x=selected_data['Perioden'], y=selected_data['SocialeUitkeringen_1'], mode='lines', fill='tonexty',stackgroup='one', name="Totale uitkeringen"))
fig.add_trace(go.Scatter(x=aow['Perioden'], y=aow['SocialeUitkeringen_1'], mode='lines', fill='tonexty',stackgroup='two', name="Pensioen"))
fig.add_trace(go.Scatter(x=zorgwetten['Perioden'], y=zorgwetten['SocialeUitkeringen_1'], mode='lines', fill='tonexty',  stackgroup='two', name="Zorgwetten"))

fig.update_layout(
    title="Besteding aan uitkeringen",
    yaxis_title="Uitkering (Miljard)",
    xaxis_title="Jaar",
    hovermode='x unified',
    yaxis = dict(tickvals = [0, 20000, 40000, 60000, 80000, 100000, 120000, 140000, 160000, 180000],
                ticktext = ['0', '20','40', '60', '80', '100', '120', '140', '160', '180'])
    )
fig.show()

Figuur 4: De x-as toont de jaartallen. De y-as toont de bedragen in euro’s die de overheid uitgeeft aan uitkeringen. Er is te zien dat er in 2006 en 2015 door zorgwetten fors meer geld naar ouderen ging. Daardoor wordt het aandeel van uitkeringen dat naar ouderen gaat steeds groter.

Perspectief 2:#

Vergrijzing per regio in Nederland#

De randen van Nederland, met hun kleinere steden en landelijke gebieden, hebben historisch gezien een oudere bevolking in vergelijking met de Randstad. Dit komt deels doordat jongere mensen vaak verhuizen naar de grote steden voor betere werkgelegenheid en kansen. Maar vergrijzing in de randen van Nederland wordt ook versterkt doordat ouderen er vaak voor kiezen om in de omgeving te blijven wonen waar ze vaak een groot deel van hun leven hebben doorgebracht.

Hide code cell source
corop = json.load(open('coropgebied_gegeneraliseerd_2021.geojson', 'r'))
for feature in corop['features']:
  feature['id'] = feature['properties']['statcode']
fig = px.choropleth(result, locations='RegioS', geojson=corop, color='GrijzeDruk_24',labels={'GrijzeDruk_24':'Grijze druk (%)'})
fig.update_geos(fitbounds="locations", visible=False)
fig.update_layout(
    title="Regionale grijze druk")
fig.show()

Figuur 5: Van elk COROP-gebied is de grijze druk weergegeven. In de grafiek is te zien dat gebieden aan de randen van Nederland, zoals Zeeuwsch-Vlaanderen en Oost-Groningen, een hogere grijze druk hebben dan gebieden in de randstad, zoals Amsterdam en Utrecht.

Vergrijzing heeft daarnaast ook invloed op de economie. Doordat jonge geschoolde werknemers naar de grote steden verhuizen en ouderen met pensioen gaan, krimpt de arbeidsmarkt. Door het gebrek aan geschoolde werknemers hebben bedrijven ook moeite om te groeien en te innoveren.

Verder hebben ouderen vaak behoefte aan sociale voorzieningen en gezondheidszorg. Deze toenemende vraag kan de gezondheidsinfrastructuur van lokale gemeenten belasten. Hierdoor moeten gemeenten meer geld uitgeven voor het verbeteren en uitbreiden van deze voorzieningen om aan de vraag te kunnen voldoen.

Hide code cell source
fig2 = px.choropleth(result, locations='RegioS', geojson=corop, color='BbpVolumemutaties_3',labels={'BbpVolumemutaties_3':'Volumeverandering bbp (%)'})
fig2.update_geos(fitbounds="locations", visible=False)
fig2.update_layout(
    title="Regionale economische groei")
fig2.show()

Figuur 6: Van elk COROP-gebied is de volumegroei van het bruto binnenlands product (bbp) weergegeven. Het bbp is een maat voor de omvang van de economie en de volumeverandering ten op zichte van 2018. In de grafiek is te zien dat gebieden aan de randen van Nederland, zoals Zeeuwsch-Vlaanderen en Oost-Groningen, economisch krimpen en dat de gebieden in de randstad, zoals Amsterdam en Utrecht, economisch groeien.

Doordat jongere mensen van de randen van Nederland naar de Randstad verhuizen, stijgt de economische groei van provincies met deze aantrekkelijke gebieden. De provincies zonder deze gebieden ervaren hierdoor wel een lagere economische groei.

Dit toont aan dat het belangrijk is om evenwichtige regionale ontwikkelingen te hebben, waardoor elke Nederlander economische groei ervaart.

Hide code cell source
randstad_provincies =  ['PV26', 'PV27', 'PV28']
randstad_provincies = result[result['RegioS'].isin(randstad_provincies)]

de_rest = ['PV20', 'PV21', 'PV22', 'PV23', 'PV25', 'PV29', 'PV31']
de_rest = result[result['RegioS'].isin(de_rest)]

randstad_provincies=randstad_provincies.groupby('Perioden')['BbpVolumemutaties_3'].mean()
randstad_provincies=randstad_provincies.reset_index()

de_rest=de_rest.groupby('Perioden')['BbpVolumemutaties_3'].mean()
de_rest=de_rest.reset_index()

fig = go.Figure()
fig.add_trace(go.Scatter(x=randstad_provincies['Perioden'], y=randstad_provincies['BbpVolumemutaties_3'], mode='lines', name="randstad"))
fig.add_trace(go.Scatter(x=de_rest['Perioden'], y=de_rest['BbpVolumemutaties_3'], mode='lines', name="de rest"))

fig.update_layout(
    title="Verandering van bbp",
    xaxis_title="Jaar",
    hovermode='x unified')
fig.show()

Figuur 7: De x-as toont de jaartallen 1995 t/m 2021. De y-as toont de volumegroei van het bbp in procenten. Er is te zien dat tussen 2012 en 2019 de provincies in de randstad, zoals Noord-Holland en Utrecht, een hogere volumegroei hebben dan de provincies buiten de randstad, zoals Zeeland en Drenthe.

Reflectie#

Voor twee grafieken, het aantal 80-plussers in de Wlz gefinancierde zorg en de grijze druk, hadden we specifiek om feedback gevraagd tijdens de presentatieronde in het werkcollege.

Wij vonden het twee matig interessante eenlijnsgrafieken en daarom wilden wij graag suggesties om beide grafieken wat interessanter te maken. Als feedback kregen we de tip dat we beide grafieken konden samenvoegen tot één grafiek. Door het samenvoegen is de relatie tussen de toenemende grijze druk en het aantal tachtig-plussers in de Wlz-gefinancierde zorg sneller te zien en is het verhaal compacter.

Voor de rest vond de TA en de andere groep dat we goede data en mooie visualisaties hadden.

Taakverdeling#

An heeft de gevonden datasets opgeschoond en gecombineerd, GitHub repository en GitHub-pagina gemaakt, de introductie geschreven, de grafieken ‘Besteding aan uitkeringen’, ‘Regionale grijze druk’, ‘Regionale economische groei’ en ‘Verandering van bbp’ gemaakt met bijbehorende stukken tekst.

Elias heeft perspectief 1 en 2 geschreven en de grafieken ‘Bevolkingspiramide’ en ‘Levensverwachting in Nederland’ gemaakt met bijbehorende stukken tekst.

Vincent heeft de reflectie en taakverdeling geschreven, de grafiek ‘Grijze druk & 80-plussers in de Wlz’ gemaakt met bijbehorende stukken tekst en de website nagekeken op lay-out, taal en fouten.